使用Soot分析jar包,构建Call Graph 您所在的位置:网站首页 appshark 分析jar包 使用Soot分析jar包,构建Call Graph

使用Soot分析jar包,构建Call Graph

2023-08-07 02:30| 来源: 网络整理| 查看: 265

背景

soot没有提供直接对jar进行分析的API [1],需将jar包解压,然后调用 Options.v().set_process_dir() 方法,设置分析目录,该目录是解压所得的class文件(注意保持层次结构)。

期间需要注意两点:

1. 需将class文件加入soot_class_path;

2. 先设置mainClass,后加载necessaryClasses。

核心代码

public static void main(String[] args) { //spotbugs -- testing String classesDir = "D:\\wkspace\\seed8\\dir\\spotbugs"; String mainClass = "edu.umd.cs.findbugs.LaunchAppropriateUI"; //set classpath String jreDir = System.getProperty("java.home") + "\\lib\\jce.jar"; String jceDir = System.getProperty("java.home") + "\\lib\\rt.jar"; String path = jreDir + File.pathSeparator + jceDir + File.pathSeparator + classesDir; Scene.v().setSootClassPath(path); //add an intra-procedural analysis phase to Soot TestCallGraphSootJar_3 analysis = new TestCallGraphSootJar_3(); PackManager.v().getPack("wjtp").add(new Transform("wjtp.TestSootCallGraph", analysis)); excludeJDKLibrary(); Options.v().set_process_dir(Arrays.asList(classesDir)); Options.v().set_whole_program(true); SootClass appClass = Scene.v().loadClassAndSupport(mainClass); Scene.v().setMainClass(appClass); Scene.v().loadNecessaryClasses();

// 或

/* Scene.v().loadNecessaryClasses(); SootClass sc = Scene.v().getSootClass(mainClass); Scene.v().setMainClass(sc);*/ //enableCHACallGraph(); enableSparkCallGraph(); PackManager.v().runPacks(); }

enableSparkCallGraph等方法请参考该post。

另外,可以模拟命令行模式,然后调用soot.main.Main,详见[3]。

————————————————

参考文献

[1] https://github.com/Sable/soot/issues/1289

[2] https://o2lab.github.io/710/p/TestSootCallGraph.java

[3] https://groups.google.com/forum/#!topic/soot-list/jcHrdhzJyl0

 


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有